// C++中拷贝构造函数调用时机通常由三种情况：

#include <iostream>
using namespace std;

class Person
{
public:
    Person()
    {
        cout << "无参构造函数！" << endl;
        mAge = 0;
    }
    ~Person()
    {
        cout << "无参析构函数！" << endl;
    }
    Person(int age)
    {
        cout << "有参构造函数！" << endl;
        mAge = age;
    }

    Person(const Person &p)
    {
    }
    int mAge;
};

// 1.使用一个已经创建完毕的对象来初始化一个新对象
void test01()
{
    Person p1(20);
    Person p2(p1);
}
// 2.值传递的方式给函数传值
void doWork(Person p)
{
}

void test02()
{
    Person p;
    doWork(p);
}

// 3.以值方式返回局部对象

Person doWork2()
{
    Person p1;
    return p1;
}
void test03()
{
    Person p = doWork2();
}

int main()
{
    test03();
    test02();
    // test01();
    return 0;
}